<html>
  <head>
    <title>ITheme接口</I></title>
  </head>
  <body>
    <script>
      /*
           2、ITheme接口 

                                        ITheme接口由ABP用于选择当前页面的布局。

                                        主题必须实现此接口才能提供请求的布局路径。

                                        这是基本主题(Basic)的ITheme实现

                                                using Volo.Abp.AspNetCore.Mvc.UI.Theming;
                                                using Volo.Abp.DependencyInjection;

                                                namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
                                                {
                                                        [ThemeName(Name)]  // 此特性是必须有的，并且主题必须在此示例中具有唯一名称 "Basic"
                                                        public class BasicTheme : ITheme, ITransientDependency
                                                        {
                                                                public const string Name = "Basic";  

                                                                public virtual string GetLayout(string name, bool fallbackToDefault = true)
                                                                {
                                                                        switch (name)  // 根据主题名称，返回布局视图路径
                                                                        {
                                                                                case StandardLayouts.Application:
                                                                                        return "~/Themes/Basic/Layouts/Application.cshtml";

                                                                                case StandardLayouts.Account:
                                                                                        return "~/Themes/Basic/Layouts/Account.cshtml";

                                                                                case StandardLayouts.Empty:
                                                                                        return "~/Themes/Basic/Layouts/Empty.cshtml";

                                                                                default:
                                                                                        return fallbackToDefault
                                                                                                ? "~/Themes/Basic/Layouts/Application.cshtml"
                                                                                                : null;
                                                                        }
                                                                }
                                                        }
                                                }

                                                [ThemeName] 特性是必须的，并且主题必须在此示例中具有唯一性名称 "Basic".

                                                GetLayout 方法返回路径。如果主题旨在又标准应用程序使用，则应该实现标准布局。它可以实现额外的布局。


                                        一旦主题实现了 ITheme 接口，它应应该将主题添加到模块的 ConfigureService 方法中的 AbpThemingOptions.

                                                Configure<AbpThemingOptions>(options =>
                                                {
                                                        options.Themes.Add<BasicTheme>();  // 在模块类中注册主题
                                                });
                                       
                                                


                                                ★、、IThemeSelector服务  

                                                        ABP允许同时使用多个主题，这就是为什么options.Themes是一个列表。

                                                        IThemeSelector服务在运行时选择主题。

                                                        应用程序开发人员可以设置AbpThemingOptions.DefaultThemeName来设置要使用的主题，

                                                        或者替换IThemeSelector服务实现（默认实现为DefaultThemeSelector）来完全控制运行时的主题选择。
      */
    </script>
  </body>
</html>